<?php
header("Content-Type:text/html;charset=utf-8");
/**
 * 文件缓存处理类
 */
class FileCache{
	
	/**
	 * [$_path 初始化路径]
	 * @var [str]
	 */
	private $_path;
	//生成文件后缀
	private $_ext = '.txt';
	//允许文件后缀参数
	private $_allowExt = ['.txt','.log'];
	//转换成字符串方式
	private $_xuliehua ;


	//初始化
	public function __construct($ext,$xlh = 'json'){
		$this->_path = dirname(__FILE__).DIRECTORY_SEPARATOR.'cache'.DIRECTORY_SEPARATOR;

		if(!in_array($ext, $this->_allowExt)){
			return false;
		}

		$this->_xuliehua = $xlh;
		$this->_ext = $ext;

		
	}

	/**
	 * 写文件缓存
	 * @param [str] $name  [文件名]
	 * @param [array] $data  [写入的数据]
	 * @param string $model 
	 */
	public function setFileCache($name,$data,$model=''){
		$filename = $this->_getFileName($name,$model);
		
		$dir = dirname($filename);
		if(!is_dir($dir)){
			mkdir($dir,0777);
		}else{
			//以有缓存文件 ，删除
			if(file_exists($filename)){
				unlink($filename);
			}
		}

		$rs = file_put_contents($filename, $this->_writeCache($data,$this->_xuliehua));
		if($rs){
			return true;
		}else{
			return false;
		}
	}

	/**
	 * 读取缓存
	 * @param  [str] $name  [文件名]
	 * @param  [str] $model [目录]
	 * @return [array]     成功返回数组，失败返回false   
	 */
	public function getFileCache($name,$model){
		$filename = $this->_getFileName($name,$model);

		if(file_exists($filename)){
			$rs = file_get_contents($filename);
			return json_decode($rs,true);

		}else{
			return false;
		}


	}


	/**
	 * 删除缓存
	 * @param  [str] $name  [文件名]
	 * @param  [str] $model [目录]
	 * @return [bool]        
	 */
	public function deleteFileCache($name,$model){
		$filename = $this->_getFileName($name,$model);

		if(file_exists($filename)){
			return unlink($filename);
		}else{
			return false;
		}

	}

	/**
	 * 抽离获取文件名方法
	 * @param  [str] $name  [文件名]
	 * @param  [str] $model [目录]
	 * @return [bool]       
	 */
	private function _getFileName($name,$model){
		!empty($model) ? $model = $model.DIRECTORY_SEPARATOR : '';
		$filename = $this->_path.$model.$name.$this->_ext;
		return $filename;
	}

	/**
	 * 根据类型转换数据为字符串方法
	 * file_put_content 只能传入字符串格式的， 所以数据转换有json ,序列化，登方法写入
	 * @param  [array] $data [需要存的数组]
	 * @param  [str] $type [需要转换的方式]
	 * @return [true/false]       
	 */
	private function _writeCache($data,$type){
		switch ($type) {
			case 'json':
					//return json_encode($data,JSON_UNESCAPED_UNICODE);
					return json_encode($data,JSON_UNESCAPED_UNICODE);

				break;
			
			default:
				# code...
			echo 11;
			exit;
				break;
		}
	}

	//



}


